package com.ldu.houserent.controller.backend;

import cn.hutool.http.HtmlUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ldu.houserent.common.base.BaseController;
import com.ldu.houserent.common.dto.JsonResult;
import com.ldu.houserent.common.util.PageUtil;
import com.ldu.houserent.entity.News;
import com.ldu.houserent.service.NewsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Date;

/**
 * 新闻资讯的控制器
 */
@Controller("backendNewsController")
@RequestMapping("/admin/news")     //新闻资讯页面的地址
public class NewsController extends BaseController {

    @Autowired
    private NewsService newsService;

    /*
        进入新闻资讯管理页面
     */
    @RequestMapping("")             //此处""内的内容是拼接在/admin/news之后的内容
    public String newsList(@RequestParam(value = "page",defaultValue = "1")Long pageNumber, @RequestParam(value = "size",defaultValue = "6")Long pageSize, Model model){
        //封装page
        Page page= PageUtil.initMpPage(pageNumber,pageSize);
        //进行查询
        News condition = new News();
        Page<News> newsPage = newsService.findAll(page,condition);     //condition是查询条件
        //model存储数据返回前端
        model.addAttribute("pageInfo",newsPage);
        model.addAttribute("pagePrefix","/admin/news?");
        model.addAttribute("tab","news-list");         //鼠标点击后，改变页面中的字体颜色样式
        return "admin/news-list";      //指向jsp页面
    }

    /*
        进入新闻资讯发布页面
     */
    @RequestMapping("/publish")             //此处""内的内容是拼接在/admin/news之后的内容
    public String publish(@RequestParam(value = "id",required = false)Long id,Model model){     //用model将当前数据传给前端
        News news=new News();
        //新闻资讯编辑界面
        if (id!=null){      //说明这是在执行修改操作，即进入编辑页面；如id=null，则执行新增操作
            news=newsService.get(id);
            if (news==null){
                return renderNotFound();        //转向404页面
            }
        }
        model.addAttribute("news",news);
        return "admin/news-publish";      //指向jsp页面
    }

    /*
        发布新闻资讯提交页面    插入功能的实现
     */
    @RequestMapping(value = "/publish/submit",method = RequestMethod.POST)
    @ResponseBody
    public JsonResult publishSubmit(News news){
        try {
            if (news.getId()==null) {      //id为空，说明当前是新增状态
                news.setCreateTime(new Date());
            }else {                         //id不为空，说明当前是修改状态
                News queryNews=newsService.get(news.getId());
                if (queryNews==null){
                    return JsonResult.error("发布失败，没有找到要修改的新闻资讯");
                }
            }
            //提取摘要,只提取300个字
            int postSummary = 300;
            String sunmmaryText = HtmlUtil.cleanHtmlTag(news.getContent());     //去除格式，只剩下纯文字
            if (sunmmaryText.length()>postSummary){     //如果超了300字，就只提取300字
                String summary = sunmmaryText.substring(0,postSummary);
                news.setSummary(summary);
            }else {     //如果不足300，则全部提取
                news.setSummary(sunmmaryText);
            }
            newsService.insertOrUpdate(news);                         //保存
        }catch (Exception e){
            return JsonResult.error("发布失败，请填写完整信息后再提交");
        }
        return JsonResult.success("发布成功",news.getId());      //指向jsp页面
    }

    /*
        删除新闻资讯
     */
    @RequestMapping("/delete")
    @ResponseBody
    public JsonResult deleteNews(@RequestParam("id")Long id){
        try {
            News news=newsService.get(id);   //根据id获取到新闻资讯
            if (news==null){
                return JsonResult.error("操作失败，没有找到该新闻资讯");
            }
            newsService.delete(id);     //删除新闻资讯
        }catch (Exception e){
            return JsonResult.error("删除新闻资讯失败");
        }
        return JsonResult.success("删除新闻资讯成功");
    }
}//NewsController
